﻿// Artificial Intelligence for Humans
// Volume 3: Deep Learning and Neural Networks
// C# Version
// http://www.aifh.org
// http://www.jeffheaton.com
//
// Code repository:
// https://github.com/jeffheaton/aifh
//
// Copyright 2015 by Jeff Heaton
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// For more information on Heaton Research copyrights, licenses
// and trademarks visit:
// http://www.heatonresearch.com/copyright
//

namespace AIFH_Vol3_Core.Core.Selection
{
    /// <summary>
    ///     Perform a grid search over the axes.
    /// </summary>
    public class GridModelSelection : ModelSelection
    {
        /// <summary>
        ///     Is the search done?
        /// </summary>
        private bool _done;

        /// <inheritdoc />
        public override object[] Next()
        {
            if (_done)
            {
                return null;
            }

            var result = new object[SearchAxises.Count];

            for (var i = 0; i < result.Length; i++)
            {
                result[i] = SearchAxises[i].CurrentState();
            }

            var idx = 0;
            while (SearchAxises[idx].Advance())
            {
                idx++;
                if (idx >= SearchAxises.Count)
                {
                    _done = true;
                    break;
                }
            }
            return result;
        }
    }
}